package cn.cleanarch.infra.idp.pms.service;

import cn.cleanarch.infra.idp.commons.domain.dto.PageResult;
import cn.cleanarch.infra.idp.pms.domain.dto.ProjectCategoryDTO;
import cn.cleanarch.infra.idp.pms.domain.dto.ProjectDTO;
import cn.cleanarch.infra.idp.pms.domain.entity.Project;
import cn.cleanarch.infra.idp.pms.domain.query.ProjectCategoryQuery;
import cn.cleanarch.infra.idp.pms.domain.query.ProjectQuery;

import java.util.List;

/**
 * 项目服务接口
 */
public interface ProjectService {
    
    /**
     * 分页查询项目
     * 
     * @param query 查询条件
     * @return 分页结果
     */
    PageResult<ProjectDTO> pageQuery(ProjectQuery query);
    
    /**
     * 根据ID获取项目
     * 
     * @param id 项目ID
     * @return 项目
     */
    Project getById(Long id);
    
    /**
     * 创建项目
     * 
     * @param dto 项目DTO
     * @return 创建后的项目
     */
    ProjectDTO create(ProjectDTO dto);
    
    /**
     * 更新项目
     * 
     * @param dto 项目DTO
     * @return 更新后的项目
     */
    ProjectDTO update(ProjectDTO dto);
    
    /**
     * 删除项目
     * 
     * @param id 项目ID
     * @return 是否删除成功
     */
    Boolean delete(Long id);
    
    /**
     * 获取项目分类列表
     * 
     * @return 分类列表
     */
    List<ProjectCategoryDTO> getProjectCategories();
    
    /**
     * 获取用户列表（用于选择负责人）
     * 
     * @return 用户列表
     */
    List<ProjectCategoryDTO> getUsers();
    
    /**
     * 获取用户列表（支持搜索）
     * 
     * @param username 用户名搜索关键词
     * @return 用户列表
     */
    List<ProjectCategoryDTO> getUsers(String username);
    
    /**
     * 将项目实体转换为DTO
     * 
     * @param project 项目实体
     * @return 项目DTO
     */
    ProjectDTO convertToDTO(Project project);
}